package com.tao.YanMoDesignPattern.status.caseChange;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author Mi_Tao
 * @Date 2023/7/22
 * @Description 投票管理
 * @Version 1.0
 **/
public class VoteManager {

    // 持有状态处理的对象
    private VoteState state = null;


    // 记录用户投票的结果   用户名称，投票的选项
    private Map<String, String> mapVote = new HashMap<String, String>();

    // 记录用户投票的次数  用户名称，投票的次数
    private Map<String, Integer> mapVoteCount = new HashMap<String, Integer>();

    public Map<String, String> getMapVote() {
        return mapVote;
    }


    /**
     * 投票
     *
     * @param user     投票人
     * @param voteItem 投票项
     */
    public void vote(String user, String voteItem) {
        // 1、先为该用户增加投票的次数
        // 从记录中取出已有的投票次数
        Integer oldVoteCount = mapVoteCount.get(user);
        if (oldVoteCount == null) {
            oldVoteCount = 0;
        }
        oldVoteCount = oldVoteCount + 1;

        // TODO 下面这个代码如果没有的话，无法记录用户是否已经投过票。相当重要
        mapVoteCount.put(user,oldVoteCount);

        //判断用户的类型，就相当于是判断对应的状态
        // 到底是正常投票，重复投票，恶意投票还是上黑名单的状态
        if (oldVoteCount == 1) {
            state = new NormalVoteState();
        } else if (oldVoteCount > 1 && oldVoteCount < 5) {
            state = new RepeatVoteState();
        } else if (oldVoteCount > 5 && oldVoteCount < 8) {
            state = new SpiteVoteState();
        } else if (oldVoteCount > 8) {
            state = new BlackVoteState();
        }

        // 然后转调状态对象进行相应的操作
        state.vote(user,voteItem,this);
    }
}
